/**
* script para validar fechas en una caja de texto.
*/
    
    /**
    * definimos las variables globales que van a contener la fecha completa, cada una de sus partes
    * y los dias correspondientes al mes de febrero segun sea el año bisiesto o no
    */
    var a, mes, dia, anyo, febrero;
    
    /**
    * funcion para comprobar si una año es bisiesto
    * argumento anyo > año extraido de la fecha introducida por el usuario
    */
    function anyoBisiesto(anyo)
    {
        /**
        * si el año introducido es de dos cifras lo pasamos al periodo de 1900. Ejemplo: 25 > 1925
        */
        if (anyo < 100)
            var fin = anyo + 1900;
        else
            var fin = anyo ;

        /*
        * primera condicion: si el resto de dividir el año entre 4 no es cero > el año no es bisiesto
        * es decir, obtenemos año modulo 4, teniendo que cumplirse anyo mod(4)=0 para bisiesto
        */
        if (fin % 4 != 0)
            return false;
        else
        {
            if (fin % 100 == 0)
            {
                /**
                * si el año es divisible por 4 y por 100 y divisible por 400 > es bisiesto
                */
                if (fin % 400 == 0)
                {
                    return true;
                }
                /**
                * si es divisible por 4 y por 100 pero no lo es por 400 > no es bisiesto
                */
                else
                {
                    return false;
                }
            }
            /**
            * si es divisible por 4 y no es divisible por 100 > el año es bisiesto
            */
            else
            {
                return true;
            }
        }
    }
    
/**
* funcion principal de validacion de la fecha
* argumento fecha > cadena de texto de la fecha introducida por el usuario
*/
function validar_fecha(fecha,nombre_campo)
{
   if (fecha=="dd-mm-yyyy")
   {
       	alert("Debe ingresar \'" + nombre_campo + "\'");
       	return false;
   }

   if ( !(validar_texto(fecha,nombre_campo)) )
   {
		return false;
   }
   /**
   * obtenemos la fecha introducida y la separamos en dia, mes y año
   */
    a=fecha;

        dia=a.split("-")[0];
        mes=a.split("-")[1];
        anyo=a.split("-")[2];
       
	   if(dia==undefined) dia = 0;
	   if(mes==undefined) mes = 0;
	   if(anyo==undefined) anyo = 0;

	   if ( !(validar_numero(dia,nombre_campo)) )
       {
              return false;
       }
	   if ( !(validar_numero(mes,nombre_campo)) )
       {
              return false;
       }
	   if ( !(validar_numero(anyo,nombre_campo)) )
       {
              return false;
       }
	   	   	   
       if(anyoBisiesto(anyo))
           febrero=29;
       else
           febrero=28;
       /**
       * si el mes introducido es negativo, 0 o mayor que 12 > alertamos y detenemos ejecucion
       */
       if ((mes<1) || (mes>12))
       {
           alert("El mes introducido en \'" + nombre_campo + "\' no es valido. Por favor, introduzca un mes correcto");
           return false;
       }
       /**
       * si el mes introducido es febrero y el dia es mayor que el correspondiente 
       * al año introducido > alertamos y detenemos ejecucion
       */
       if ((mes==2) && ((dia<1) || (dia>febrero)))
       {
           alert("El dia introducido en \'" + nombre_campo + "\' no es valido. Por favor, introduzca un dia correcto");
           return false;
       }
       /**
       * si el mes introducido es de 31 dias y el dia introducido es mayor de 31 > alertamos y detenemos ejecucion
       */
       if (((mes==1) || (mes==3) || (mes==5) || (mes==7) || (mes==8) || (mes==10) || (mes==12)) && ((dia<1) || (dia>31)))
       {
           alert("El dia introducido en \'" + nombre_campo + "\' no es valido. Por favor, introduzca un dia correcto");
           return false;
       }
       /**
       * si el mes introducido es de 30 dias y el dia introducido es mayor de 301 > alertamos y detenemos ejecucion
       */
       if (((mes==4) || (mes==6) || (mes==9) || (mes==11)) && ((dia<1) || (dia>30)))
       {
           alert("El dia introducido en \'" + nombre_campo + "\' no es valido. Por favor, introduzca un dia correcto");
           return false;
       }
       /**
       * si el mes año introducido es menor que 1900 o mayor que 2010 > alertamos y detenemos ejecucion
       * NOTA: estos valores son a eleccion vuestra, y no constituyen por si solos fecha erronea
       */
       if ((anyo<1900) || (anyo>2010))
       {
           alert("El año introducido en \'" + nombre_campo + "\' no es valido. Por favor, introduzca un año entre 1900 y 2010");
           return false;
       }
	   return true;
    }    


    /**
    * funcion de validacion de textos
    * argumento texto > cadena de texto introducida por el usuario
    */
    function validar_texto(texto,nombre)
    {
        var tmpstr = "";
		
        for ( i=0; i < texto.length ; i++ )
		{
                if ( texto.charAt(i) != ' ' )
                        tmpstr = tmpstr + texto.charAt(i);
				if ( texto.charAt(i) == '|' )
				{
						alert( nombre + " contiene un caracter no permitido '|'." );
						return false;
				}
		}
        texto = tmpstr;

		if ( texto == "" )
        {
                alert( "Debe ingresar \'" + nombre + "\' ." );		
                return false;
        }
         
		return true;
	}	


    /**
    * funcion de validacion de números
    * argumento numero > cantidad introducida por el usuario
    */
    function validar_numero(numero,nombre)
	{
    	if ( !(validar_texto(numero,nombre)) )
       	{
              return false;
       	}
	
		for (var i=0; i < numero.length; i++){
   			var digit = numero.charAt(i);
   			if (digit < "0" || digit > "9"){
    			if (digit == ","){
     				alert ("\'" + nombre + "\' no debe incluir comas.");
     				return false;
    			}
				else {
     				alert ("\'" + nombre + "\' debe estar compuesto solo por números.");
     				return false;
    			}
			}	
   		}
		return true;
	}


    /**
    * funcion de validacion de números con decimales
    * argumento numero > cantidad introducida por el usuario
    */
    function validar_numero_dec(numero,nombre)
	{
		decallowed = 2;  // how many decimals are allowed?

		if (isNaN(numero) || numero == "") {
			alert("\'" + nombre + "\' debe estar compuesto solo por números y/o punto decimal('.').");
			return false;
		}
		else {
			if (numero.indexOf('.') == -1) numero += ".";
			dectext = numero.substring(numero.indexOf('.')+1, numero.length);

			if (dectext.length > decallowed)
			{
				alert ("\'" + nombre + "\' no puede tener mas de " + decallowed + " decimales.");
				return false;
			}
	   }
	   return true;
	}


    /**
    * funcion que permite quitar caracteres
    * en blanco al inicio y fin de un string
    */
    function sin_blancos(estring)
	{
		var tmpstr = "";

        for ( i=0; i < estring.length ; i++ )
                if ( estring.charAt(i) != ' ' )
                        tmpstr = tmpstr + estring.charAt(i);

        return tmpstr;
	}


    /**
    * funcion de validacion de ENTER
    * argumento KeyStroke > Tecla presionada por el usuario
    * Al presionar ENTER se llama al proc. 'grabar', el cual debe ser 
    * definido dentro de la página que llama a este archivo
    */
/**    function getKey(keyStroke){
	    var isNav = (navigator.appName.indexOf("Netscape") !=-1);
	    keyHit = (isNav) ? keyStroke.which : event.keyCode;
	    if(keyHit=="13")
		    return false;
    }

    document.onkeypress = getKey;*/
